#============================================
# #知识点
# 一台计算机上面运行着很多进程，那么计算机是如何区分并管理这些进程服务端的呢?
# 计算机会给每一个运行的进程分配一 个PID号
# 如何查看
# windows电脑
# 进入cmd输入tasklist即可查看
# tasklist| findstr PID查看具体的进程

# mac电脑
# 进入终端之后输入ps aux
# Ps aux |grep PID查看具体的进程

#查看进程号
# current_process().pid()查看进程号
# os.getpid()查看当前进程号   os.getppid()查看当前主进程号
#x.terminate()杀死进程
from multiprocessing import Process,current_process
from time import sleep
import os

def qwq():
    print(current_process().pid)
    print("主",os.getppid())
    sleep(20)

if __name__ == "__main__":
    x = Process(target=qwq)
    x.start()
    x.terminate()
    sleep(0.1)
    x.is_alive()
    #注：一般判断布欧值得变量为is_名字
    print("主进程",current_process().pid)
#============================================
# 僵尸进程
# 死了但是没有死透
# 当你开设了子进程之后该进程死后不会立刻释放占用的进程号
# 因为我要让父进程能够查看到它开设的子进程的一些基本信息占用的pid号运行时间。。。
# 所有的进程都会步入僵尸进程
# 父进程不死并且在无限制的创建子进程并且子进程也不结束
# 回收子进程占用的pid号
# 父进程等待子进程运行结束
# 父进程调用join方法
# 孤儿进程
# 子进程存活，父进程意外死亡
# 操作系统会开设一个“儿童福利院"专[管理孤儿进程回收相关资源
#============================================
# 主进程创建守护进程
# 其一：守护进程会在主进程代码执行结束后就终止
# 其二：守护进程内无法再开启子进程,否则抛出异常：
# AssertionError: daemonic processes are not allowed to have children
from multiprocessing import Process
import time
def qwq():
    print("子进程")

if __name__ == "__main__":
    x = Process(target=qwq)
    x.daemon = True #守护进程必须再进程开启前执行
    x.start()
    # x.terminate()
    # time.sleep(0.1)
    # print(x.is_alive())
    print("qwq")
#============================================
